bitkeeper revision 1.1159.175.1 (419a9b9dCZLKnt1tKvFYyV5cDeDbmQ)
authoriap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk>
Wed, 17 Nov 2004 00:30:21 +0000 (00:30 +0000)
committeriap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk>
Wed, 17 Nov 2004 00:30:21 +0000 (00:30 +0000)
Clean up drivers/char/mem.c patch.

linux-2.6.9-xen-sparse/drivers/char/mem.c
linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pgtable.h

index 83f54c227ccca89d35a5fde3919c5b85c8993972..072c5ca76145265d33512c085f6bd85085562359 100644 (file)
@@ -43,7 +43,12 @@ extern void tapechar_init(void);
  */
 static inline int uncached_access(struct file *file, unsigned long addr)
 {
-#if defined(__i386__)
+#ifdef CONFIG_XEN
+        if (file->f_flags & O_SYNC)
+                return 1;
+        /* Xen sets correct MTRR type on non-RAM for us. */
+        return 0;
+#elif defined(__i386__)
        /*
         * On the PPro and successors, the MTRRs are used to set
         * memory types for physical addresses outside main memory,
@@ -193,7 +198,6 @@ static ssize_t write_mem(struct file * file, const char __user * buf,
 
 static int mmap_mem(struct file * file, struct vm_area_struct * vma)
 {
-#if !defined(CONFIG_XEN)
        unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
        int uncached;
 
@@ -212,28 +216,16 @@ static int mmap_mem(struct file * file, struct vm_area_struct * vma)
        if (uncached)
                vma->vm_flags |= VM_IO;
 
-       if (remap_page_range(vma, vma->vm_start, offset, vma->vm_end-vma->vm_start,
-                            vma->vm_page_prot))
+#if defined(CONFIG_XEN)
+       if (io_remap_page_range(vma, vma->vm_start, offset, 
+                               vma->vm_end-vma->vm_start, vma->vm_page_prot))
                return -EAGAIN;
-       return 0;
-#elif !defined(CONFIG_XEN_PRIVILEGED_GUEST)
-       return -ENXIO;
 #else
-       unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
-
-       if (!(xen_start_info.flags & SIF_PRIVILEGED))
-               return -ENXIO;
-
-       /* Currently we're not smart about setting PTE cacheability. */
-       vma->vm_flags |= VM_RESERVED | VM_IO;
-       vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
-
-       if (direct_remap_area_pages(vma->vm_mm, vma->vm_start, offset, 
-                               vma->vm_end-vma->vm_start, vma->vm_page_prot,
-                               DOMID_IO))
+       if (remap_page_range(vma, vma->vm_start, offset, vma->vm_end-vma->vm_start,
+                            vma->vm_page_prot))
                return -EAGAIN;
-       return 0;
 #endif
+       return 0;
 }
 
 extern long vread(char *buf, char *addr, unsigned long count);
index 67325a02624763060a59a666f704422b770afab3..118f224d28f105d00d70973166370b13dda9fd5e 100644 (file)
@@ -536,7 +536,8 @@ static inline unsigned long arbitrary_virt_to_phys(void *va)
 #define kern_addr_valid(addr)  (1)
 #endif /* !CONFIG_DISCONTIGMEM */
 
-#define io_remap_page_range remap_page_range
+#define io_remap_page_range(vma,from,phys,size,prot)                     \
+        direct_remap_area_pages(vma->vm_mm,from,phys,size,prot,DOMID_IO)
 
 #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG
 #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_DIRTY